/**
Metamorfose is an interactive ecosystem, which uses computer vision
and sound analysis to define its basic rules.
Copyright (C) 2008  laboratorio (info@laboratorio.us)

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

class SampleController
{
  SampleLib sampleLib;
  int distanceFrequency = 20;
  int frameFrequency = 60;
  int lastPlayedFrame = 0;
  Vector3D lastPlayedPosition = new Vector3D(0,0);
  
  /**
   * Class constructor
   *
   * @param samplesLib  
   * @see SampleLib
   */  
  SampleController(SampleLib samplesLib)
  {
    this.sampleLib = samplesLib;
  }

  /**
   * Changes the sample based on location
   * 
   * @param location  the location vector
   */
  void tryToPlay(Vector3D location)
  {
    float distance;
    distance = Vector3D.distance(lastPlayedPosition, location);
    if (distance >= distanceFrequency && (frameCount - lastPlayedFrame) > frameFrequency)
    {
      int index = int(random(0, this.sampleLib.samples.length));
      this.sampleLib.samples[index].trigger();
      lastPlayedPosition = location;
      lastPlayedFrame = frameCount;
     }
  }

}
